package mysql

import (
	"log"
	"os"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// 结构体的对象映射的是表记录。

// 通用表、继承子属性
type BaseModel struct {
	ID         int        `gorm:"primaryKey"`
	CreateTime *time.Time `gorm:"autoCreateTime"`
	UpdateTime *time.Time `gorm:"autoCreateTime"`
	Name       string     `gorm:"type:varchar(32);unique;not null"`
}

// 英雄表	名称、职业、Hid、创建时间、修改时间、删除时间
type Hero struct {
	BaseModel
	Job     string
	Skill1  string
	Skill2  string
	Skill3  string
	MingWen string
}

// 装备表	名称、分类、Zid、价格、功能

type Zhuangbei struct {
	BaseModel
	Price     int
	Attribute string `gorm:"type:varchar(100);not null"`
	Detail    string
}

// 皮肤表	名称、价格、是否是限定、创建时间、修改时间、删除时间

type Skin struct {
	Price   int
	SaleNow string
}

func MysqlInit() *gorm.DB {
	// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
	dsn := "root:Mm2021@mm@tcp(127.0.0.1:3306)/wzry?charset=utf8mb4&parseTime=True&loc=Local"
	// 创建日志对象
	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
		logger.Config{
			//SlowThreshold: time.Second,   // 慢 SQL 阈值
			LogLevel: logger.Info, // Log level
		},
	)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: newLogger, // 日志配置
	})

	if err != nil {
		panic("failed to connect database")
	}
	db.AutoMigrate(&Hero{})
	db.AutoMigrate(&Zhuangbei{})
	db.AutoMigrate(&Skin{})
	return db
}
